package viewer;

import java.util.ArrayList;
import model.*;
import java.util.Arrays;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Calendar;
import java.util.Vector;

/**
 * Производит преобразования между объектами классов и представлением таблицы
 * @author Дмитрий
 */
public class Convertor {

    /**
     * Получение полета по его полям
     * @param flightsNumber Номер рейса
     * @param aerobus Название аэробуса
     * @param depCity Город отправления
     * @param depAir Аэропорт отправления
     * @param arrCity Город прибытия
     * @param arrAir Аэропорт прибытия
     * @param depHour Час вылета
     * @param depMin Минуты вылета
     *  @param travelHour Часы полета
     * @param travelMin Минуты полета
     * @return Рейс
     */
    public static Flight convertToFlight(int flightsNumber, String aerobus,
            String depCity, String depAir, String arrCity, String arrAir,
            Date departTime, Date travelTime) {

        Flight flight = new Flight();
        flight.setFlightNumber(flightsNumber);
        flight.setAircraft(aerobus);

        Point pointDep = new Point();
        pointDep.setTown(depCity);
        pointDep.setAirport(depAir);

        Point pointArr = new Point();
        pointArr.setTown(arrCity);
        pointArr.setAirport(arrAir);

        Route route = new Route();
        route.setPointDepart(pointDep);
        route.setPointArrive(pointArr);

        flight.setRoute(route);

        flight.setDepartTime(departTime);
        flight.setTravelTime(travelTime);

        return flight;
    }

    /**
     * Получение вектора (строки таблицы) по рейсу
     * @param flight Рейса
     * @return Строка таблицы
     */
    public static Vector ToVector(Flight flight) {
        Vector<String> vect = new Vector();
        String flightsNumber = Integer.toString(flight.getFlightNumber());
        String aerobus = flight.getAircraft();
        String depCity = flight.getRoute().getPointDepart().getTown();
        String depAir = flight.getRoute().getPointDepart().getAirport();
        String dep = depCity + "/" + depAir + "/";
        String arrCity = flight.getRoute().getPointArrive().getTown();
        String arrAir = flight.getRoute().getPointArrive().getAirport();
        String arr = arrCity + "/" + arrAir + "/";
        String depTime = flight.getDepartTime().toString().substring(11, 16);
        String arrTime = flight.getTravelTime().toString().substring(11, 16);
        boolean addAll = vect.addAll(Arrays.asList(flightsNumber, aerobus, dep, arr, depTime, arrTime));
        if (addAll) {
            return vect;
        } else {
            return null;
        }
    }

    /**
     * Получение таблицы по рейсам
     * @param flights Рейсы
     * @return Строки таблицы
     */
    public static ArrayList<Vector> ToArrayList(Flights flights) {
        if (flights != null) {
            Vector vect;
            ArrayList<Vector> table = new ArrayList<Vector>();
            for (int i = 0; i < flights.getSize(); i++) {
                vect = Convertor.ToVector(flights.getFlightByIndex(i));
                table.add(vect);
            }
            return table;
        } else {
            return null;
        }
    }

    public static Date toDate(String hour, String min) {
        GregorianCalendar time = new GregorianCalendar();
        time.set(0, 0, 0, Integer.parseInt(hour), Integer.parseInt(min), 0);
        time.set(Calendar.MILLISECOND, 0);
        return time.getTime();
    }
}
